﻿using System.Collections.Generic;
using System.Web.Mvc;
using DAO;
using DTO;
using PTExpress.Models;

namespace PTExpress.Controllers
{
    [HandleError]
    [Authorize]
    public class QLXeController : Controller
    {
        public IFormsAuthenticationService FormsService { get; set; }

        

        public QLXeController()
            : base()
        {
            Dictionary<int, string> LoaiXe;
            Dictionary<int, string> TinhTrangXe;
            LoaiXe = new Dictionary<int, string>();
            LoaiXe.Add(1, "Ghế ngồi");
            LoaiXe.Add(2, "Giường nằm");
            LoaiXe.Add(3, "Trung chuyển");
            this.ViewData.Add("LoaiXe", LoaiXe);

            TinhTrangXe =
                new Dictionary<int, string>();
            TinhTrangXe.Add(1, "Đang chạy");
            TinhTrangXe.Add(2, "Đang bảo trì");
            this.ViewData.Add("TinhTrangXe", TinhTrangXe);

            IEnumerable<SelectListItem> lsETinhTrang = XeDTO.GetListTinhTrang();
            this.ViewData.Add("lsETinhTrang", lsETinhTrang);
            IEnumerable<SelectListItem> lsELoaiGhe = XeDTO.GetListLoaiXe();
            this.ViewData.Add("lsELoaiGhe", lsELoaiGhe);
        }

        public ActionResult Index()
        {
            XeDAO xeDAO = new XeDAO();
            List<XeDTO> ls = xeDAO.GetAllWhere("daxoa = 0");
            this.ViewData.Add("dsXe", ls);
            return View();
        }

        public ActionResult NgungSuDung()
        {
            XeDAO xeDAO = new XeDAO();
            List<XeDTO> ls = xeDAO.GetAllWhere("daxoa = 1");
            this.ViewData.Add("dsXe", ls);
            return View();
        }

        public ActionResult Sua(int id)
        {
            Xe model = new Xe();
            XeDAO xeDAO = new XeDAO();
            XeDTO xeDTO = xeDAO.getById(id);
            ViewData["tenXe"] = xeDTO.TenXe;
            model.Id = id;
            model.TenXe = xeDTO.TenXe;
            model.BienSo = xeDTO.BienSo;
            model.HangSanXuat = xeDTO.HangSanXuat;
            model.Loai = xeDTO.Loai;
            model.NgungSuDung = xeDTO.DaXoa;
            model.SoGhe = xeDTO.SoGhe;
            model.TinhTrang = model.TinhTrang;

            return View(model);
        }

        [HttpPost]
        public ActionResult Sua(Xe model, int id)
        {
            XeDAO xeDAO = new XeDAO();
            XeDTO xeDTO = xeDAO.getById(id);
            ViewData["tenXe"] = xeDTO.TenXe;
            ViewData["ModelState"] = ModelState.IsValid;

            bool thanhCong = false;
            if (ModelState.IsValid)
            {
                xeDTO.BienSo = model.BienSo;
                xeDTO.DaXoa = model.NgungSuDung;
                xeDTO.HangSanXuat = model.HangSanXuat;
                xeDTO.Loai = model.Loai;
                xeDTO.SoGhe = model.SoGhe;
                xeDTO.TenXe = model.TenXe;
                xeDTO.TinhTrang = model.TinhTrang;
                thanhCong = xeDAO.Edit(xeDTO);
            }
            ViewData["ThanhCong"] = thanhCong;
            return View(model);
        }

        public ActionResult Them()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Them(Xe model)
        {
            ViewData["ModelState"] = ModelState.IsValid;

            bool thanhCong = false;
            if (ModelState.IsValid)
            {
                XeDAO xeDAO = new XeDAO();
                if (xeDAO.CheckNameExists(model.TenXe))
                {
                    ModelState.AddModelError("TenXe", "Trùng tên xe, vui lòng chọn một tên khác chưa sử dụng.");
                    ViewData["ModelState"] = false;
                    return View(model);
                }

                
                XeDTO xeDTO = new XeDTO();
                xeDTO.BienSo = model.BienSo;
                xeDTO.DaXoa = model.NgungSuDung;
                if (string.IsNullOrEmpty(model.HangSanXuat))
                {
                    xeDTO.HangSanXuat = "";
                }
                else
                {
                    xeDTO.HangSanXuat = model.HangSanXuat;
                }
                xeDTO.Loai = model.Loai;
                xeDTO.SoGhe = model.SoGhe;
                xeDTO.TenXe = model.TenXe;
                xeDTO.TinhTrang = model.TinhTrang;
                thanhCong = xeDAO.AddNew(xeDTO);
                if (thanhCong)
                {
                    return RedirectToAction("Index", "QLXe");
                }
            }
            ViewData["ThanhCong"] = thanhCong;
            return View(model);
        }

        public ActionResult ChuyenTinhTrangNgungSuDung(int id)
        {
            XeDAO xeDAO = new XeDAO();
            xeDAO.NgungSuDung(id, true);
            return RedirectToAction("Index", "QLXe");
        }

        public ActionResult ChuyenTinhTrangSuDung(int id)
        {
            XeDAO xeDAO = new XeDAO();
            xeDAO.NgungSuDung(id, false);
            return RedirectToAction("NgungSuDung", "QLXe");
        }

    }
}
